{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "url_univclass= 'https://raw.githubusercontent.com/irenekarijadi/RF-LSTM-CEEMDAN/main/Dataset/data%20of%20UnivClass_Abby.csv'\n",
    "univclass= pd.read_csv(url_univclass)\n",
    "data_univclass= univclass[(univclass['timestamp'] > '2015-03-01') & (univclass['timestamp'] < '2015-06-01')]\n",
    "dfs_univclass=data_univclass['energy']\n",
    "datas_univclass=pd.DataFrame(dfs_univclass)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## import libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "import warnings\n",
    "\n",
    "if not sys.warnoptions:\n",
    "    warnings.simplefilter('ignore')\n",
    "\n",
    "from PyEMD import CEEMDAN\n",
    "import numpy\n",
    "import math\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn import metrics\n",
    "\n",
    "import time\n",
    "import dataframe_image as dfi\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import all functions from another notebook for building prediction methods"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import Setting\n",
    "from myfunctions import lr_model,svr_model,ann_model,rf_model,lstm_model,hybrid_ceemdan_rf,hybrid_ceemdan_lstm,proposed_method"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import parameter settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "hours=Setting.n_hours\n",
    "data_partition=Setting.data_partition\n",
    "max_features=Setting.max_features\n",
    "epoch=Setting.epoch\n",
    "batch_size=Setting.batch_size\n",
    "neuron=Setting.neuron\n",
    "lr=Setting.lr\n",
    "optimizer=Setting.optimizer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run the experiments\n",
    "### Run this following cell will train and test the proposed method and other benchmark methods on University Classroom Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--- 0.5360839366912842 seconds - Linear Regression- univclass ---\n",
      "--- 0.35222482681274414 seconds - Support Vector Regression- univclass ---\n",
      "--- 1.942883014678955 seconds - ANN- univclass ---\n",
      "--- 1.160461187362671 seconds - Random Forest- univclass ---\n",
      "--- 9.038203239440918 seconds - lstm- univclass ---\n",
      "--- 32.14202427864075 seconds - ceemdan_rf- univclass ---\n",
      "--- 85.86947441101074 seconds - ceemdan_lstm- univclass ---\n",
      "--- 81.0563657283783 seconds - proposed_method- univclass ---\n"
     ]
    }
   ],
   "source": [
    "#Linear Regression\n",
    "\n",
    "start_time = time.time()\n",
    "lr_univclass=lr_model(datas_univclass,hours,data_partition)\n",
    "lr_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - Linear Regression- univclass ---\" % (lr_time_univclass))\n",
    "\n",
    "#Support Vector Regression\n",
    "start_time = time.time()\n",
    "svr_univclass=svr_model(datas_univclass,hours,data_partition)\n",
    "svr_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - Support Vector Regression- univclass ---\" % (svr_time_univclass))\n",
    "\n",
    "\n",
    "#ANN\n",
    "start_time = time.time()\n",
    "ann_univclass=ann_model(datas_univclass,hours,data_partition)\n",
    "ann_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - ANN- univclass ---\" % (ann_time_univclass))\n",
    "\n",
    "#random forest\n",
    "start_time = time.time()\n",
    "rf_univclass=rf_model(datas_univclass,hours,data_partition,max_features)\n",
    "rf_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - Random Forest- univclass ---\" % (rf_time_univclass))\n",
    "\n",
    "#LSTM\n",
    "start_time = time.time()\n",
    "lstm_univclass=lstm_model(datas_univclass,hours,data_partition,max_features,epoch,batch_size,neuron,lr,optimizer)\n",
    "lstm_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - lstm- univclass ---\" % (lstm_time_univclass))\n",
    "\n",
    "\n",
    "#CEEMDAN RF\n",
    "start_time = time.time()\n",
    "ceemdan_rf_univclass=hybrid_ceemdan_rf(dfs_univclass,hours,data_partition,max_features)\n",
    "ceemdan_rf_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - ceemdan_rf- univclass ---\" % (ceemdan_rf_time_univclass))\n",
    "\n",
    "#CEEMDAN LSTM\n",
    "start_time = time.time()\n",
    "ceemdan_lstm_univclass=hybrid_ceemdan_lstm(dfs_univclass,hours,data_partition,max_features,epoch,batch_size,neuron,lr,optimizer)\n",
    "ceemdan_lstm_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - ceemdan_lstm- univclass ---\" % (ceemdan_lstm_time_univclass))\n",
    "\n",
    "\n",
    "#proposed method\n",
    "start_time = time.time()\n",
    "proposed_method_univclass=proposed_method(dfs_univclass,hours,data_partition,max_features,epoch,batch_size,neuron,lr,optimizer)\n",
    "proposed_method_time_univclass=time.time() - start_time\n",
    "print(\"--- %s seconds - proposed_method- univclass ---\" % (proposed_method_time_univclass))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summarize of experimental results with running time\n",
    "### Run this following cell will summarize the result and generate output used in Section 4.4 (Table 3) for University Classroom dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LR</th>\n",
       "      <th>SVR</th>\n",
       "      <th>ANN</th>\n",
       "      <th>RF</th>\n",
       "      <th>LSTM</th>\n",
       "      <th>CEEMDAN RF</th>\n",
       "      <th>CEEMDAN LSTM</th>\n",
       "      <th>Proposed Method</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>University Classroom results</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MAPE(%)</th>\n",
       "      <td>3.655593</td>\n",
       "      <td>5.807452</td>\n",
       "      <td>5.983385</td>\n",
       "      <td>6.777798</td>\n",
       "      <td>5.169115</td>\n",
       "      <td>3.084158</td>\n",
       "      <td>2.123226</td>\n",
       "      <td>1.964881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RMSE</th>\n",
       "      <td>1.628556</td>\n",
       "      <td>2.529214</td>\n",
       "      <td>2.401744</td>\n",
       "      <td>2.649659</td>\n",
       "      <td>2.169301</td>\n",
       "      <td>1.332275</td>\n",
       "      <td>0.866036</td>\n",
       "      <td>0.815484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MAE</th>\n",
       "      <td>1.061574</td>\n",
       "      <td>1.779553</td>\n",
       "      <td>1.748034</td>\n",
       "      <td>2.017364</td>\n",
       "      <td>1.530002</td>\n",
       "      <td>0.919540</td>\n",
       "      <td>0.613114</td>\n",
       "      <td>0.569825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>running time (s)</th>\n",
       "      <td>0.536084</td>\n",
       "      <td>0.352225</td>\n",
       "      <td>1.942883</td>\n",
       "      <td>1.160461</td>\n",
       "      <td>9.038203</td>\n",
       "      <td>32.142024</td>\n",
       "      <td>85.869474</td>\n",
       "      <td>81.056366</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    LR       SVR       ANN        RF  \\\n",
       "University Classroom results                                           \n",
       "MAPE(%)                       3.655593  5.807452  5.983385  6.777798   \n",
       "RMSE                          1.628556  2.529214  2.401744  2.649659   \n",
       "MAE                           1.061574  1.779553  1.748034  2.017364   \n",
       "running time (s)              0.536084  0.352225  1.942883  1.160461   \n",
       "\n",
       "                                  LSTM  CEEMDAN RF  CEEMDAN LSTM  \\\n",
       "University Classroom results                                       \n",
       "MAPE(%)                       5.169115    3.084158      2.123226   \n",
       "RMSE                          2.169301    1.332275      0.866036   \n",
       "MAE                           1.530002    0.919540      0.613114   \n",
       "running time (s)              9.038203   32.142024     85.869474   \n",
       "\n",
       "                              Proposed Method  \n",
       "University Classroom results                   \n",
       "MAPE(%)                              1.964881  \n",
       "RMSE                                 0.815484  \n",
       "MAE                                  0.569825  \n",
       "running time (s)                    81.056366  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "running_time_univclass=pd.DataFrame([lr_time_univclass,svr_time_univclass,ann_time_univclass,\n",
    "                                   rf_time_univclass,lstm_time_univclass,ceemdan_rf_time_univclass,\n",
    "                                   ceemdan_lstm_time_univclass,proposed_method_time_univclass])\n",
    "running_time_univclass=running_time_univclass.T\n",
    "running_time_univclass.columns=['LR','SVR','ANN','RF','LSTM','CEEMDAN RF','CEEMDAN LSTM','Proposed Method']\n",
    "\n",
    "proposed_method_univclass_df=proposed_method_univclass[0:3]\n",
    "result_univclass=pd.DataFrame([lr_univclass,svr_univclass,ann_univclass,rf_univclass,lstm_univclass,ceemdan_rf_univclass,\n",
    "                    ceemdan_lstm_univclass,proposed_method_univclass_df])\n",
    "result_univclass=result_univclass.T\n",
    "result_univclass.columns=['LR','SVR','ANN','RF','LSTM','CEEMDAN RF','CEEMDAN LSTM','Proposed Method']\n",
    "univclass_summary=pd.concat([result_univclass,running_time_univclass],axis=0)\n",
    "\n",
    "univclass_summary.set_axis(['MAPE(%)', 'RMSE','MAE','running time (s)'], axis='index')\n",
    "\n",
    "univclass_summary.style.set_caption(\"University Classroom Results\")\n",
    "\n",
    "index = univclass_summary.index\n",
    "index.name =\"University Classroom results\"\n",
    "univclass_summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export table to png\n",
    "#dfi.export(univclass_summary,\"univclass_summary_table.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculate percentage improvement\n",
    "### Run this following cell will calculate percentage improvement and generate output used in Section 4.4 (Table 4) for University Classroom dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Proposed Method vs.LR</th>\n",
       "      <th>Proposed Method vs.SVR</th>\n",
       "      <th>Proposed Method vs.ANN</th>\n",
       "      <th>Proposed Method vs.RF</th>\n",
       "      <th>Proposed Method vs.LSTM</th>\n",
       "      <th>Proposed Method vs.CEEMDAN RF</th>\n",
       "      <th>Proposed Method vs. CEEMDAN LSTM</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Percentage Improvement university classroom</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MAPE(%)</th>\n",
       "      <td>46.25</td>\n",
       "      <td>66.17</td>\n",
       "      <td>67.16</td>\n",
       "      <td>71.01</td>\n",
       "      <td>61.99</td>\n",
       "      <td>36.29</td>\n",
       "      <td>7.46</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RMSE</th>\n",
       "      <td>49.93</td>\n",
       "      <td>67.76</td>\n",
       "      <td>66.05</td>\n",
       "      <td>69.22</td>\n",
       "      <td>62.41</td>\n",
       "      <td>38.79</td>\n",
       "      <td>5.84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MAE</th>\n",
       "      <td>46.32</td>\n",
       "      <td>67.98</td>\n",
       "      <td>67.40</td>\n",
       "      <td>71.75</td>\n",
       "      <td>62.76</td>\n",
       "      <td>38.03</td>\n",
       "      <td>7.06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                             Proposed Method vs.LR  \\\n",
       "Percentage Improvement university classroom                          \n",
       "MAPE(%)                                                      46.25   \n",
       "RMSE                                                         49.93   \n",
       "MAE                                                          46.32   \n",
       "\n",
       "                                             Proposed Method vs.SVR  \\\n",
       "Percentage Improvement university classroom                           \n",
       "MAPE(%)                                                       66.17   \n",
       "RMSE                                                          67.76   \n",
       "MAE                                                           67.98   \n",
       "\n",
       "                                              Proposed Method vs.ANN  \\\n",
       "Percentage Improvement university classroom                            \n",
       "MAPE(%)                                                        67.16   \n",
       "RMSE                                                           66.05   \n",
       "MAE                                                            67.40   \n",
       "\n",
       "                                             Proposed Method vs.RF  \\\n",
       "Percentage Improvement university classroom                          \n",
       "MAPE(%)                                                      71.01   \n",
       "RMSE                                                         69.22   \n",
       "MAE                                                          71.75   \n",
       "\n",
       "                                             Proposed Method vs.LSTM  \\\n",
       "Percentage Improvement university classroom                            \n",
       "MAPE(%)                                                        61.99   \n",
       "RMSE                                                           62.41   \n",
       "MAE                                                            62.76   \n",
       "\n",
       "                                             Proposed Method vs.CEEMDAN RF  \\\n",
       "Percentage Improvement university classroom                                  \n",
       "MAPE(%)                                                              36.29   \n",
       "RMSE                                                                 38.79   \n",
       "MAE                                                                  38.03   \n",
       "\n",
       "                                             Proposed Method vs. CEEMDAN LSTM  \n",
       "Percentage Improvement university classroom                                    \n",
       "MAPE(%)                                                                  7.46  \n",
       "RMSE                                                                     5.84  \n",
       "MAE                                                                      7.06  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pMAPE_LR_vs_Proposed_univclass=((lr_univclass[0]-proposed_method_univclass[0])/lr_univclass[0])*100\n",
    "pRMSE_LR_vs_Proposed_univclass=((lr_univclass[1]-proposed_method_univclass[1])/lr_univclass[1])*100\n",
    "pMAE_LR_vs_Proposed_univclass=((lr_univclass[2]-proposed_method_univclass[2])/lr_univclass[2])*100\n",
    "\n",
    "pMAPE_SVR_vs_Proposed_univclass=((svr_univclass[0]-proposed_method_univclass[0])/svr_univclass[0])*100\n",
    "pRMSE_SVR_vs_Proposed_univclass=((svr_univclass[1]-proposed_method_univclass[1])/svr_univclass[1])*100\n",
    "pMAE_SVR_vs_Proposed_univclass=((svr_univclass[2]-proposed_method_univclass[2])/svr_univclass[2])*100\n",
    "\n",
    "pMAPE_ANN_vs_Proposed_univclass=((ann_univclass[0]-proposed_method_univclass[0])/ann_univclass[0])*100\n",
    "pRMSE_ANN_vs_Proposed_univclass=((ann_univclass[1]-proposed_method_univclass[1])/ann_univclass[1])*100\n",
    "pMAE_ANN_vs_Proposed_univclass=((ann_univclass[2]-proposed_method_univclass[2])/ann_univclass[2])*100\n",
    "\n",
    "pMAPE_RF_vs_Proposed_univclass=((rf_univclass[0]-proposed_method_univclass[0])/rf_univclass[0])*100\n",
    "pRMSE_RF_vs_Proposed_univclass=((rf_univclass[1]-proposed_method_univclass[1])/rf_univclass[1])*100\n",
    "pMAE_RF_vs_Proposed_univclass=((rf_univclass[2]-proposed_method_univclass[2])/rf_univclass[2])*100\n",
    "\n",
    "pMAPE_LSTM_vs_Proposed_univclass=((lstm_univclass[0]-proposed_method_univclass[0])/lstm_univclass[0])*100\n",
    "pRMSE_LSTM_vs_Proposed_univclass=((lstm_univclass[1]-proposed_method_univclass[1])/lstm_univclass[1])*100\n",
    "pMAE_LSTM_vs_Proposed_univclass=((lstm_univclass[2]-proposed_method_univclass[2])/lstm_univclass[2])*100\n",
    "\n",
    "pMAPE_ceemdan_rf_vs_Proposed_univclass=((ceemdan_rf_univclass[0]-proposed_method_univclass[0])/ceemdan_rf_univclass[0])*100\n",
    "pRMSE_ceemdan_rf_vs_Proposed_univclass=((ceemdan_rf_univclass[1]-proposed_method_univclass[1])/ceemdan_rf_univclass[1])*100\n",
    "pMAE_ceemdan_rf_vs_Proposed_univclass=((ceemdan_rf_univclass[2]-proposed_method_univclass[2])/ceemdan_rf_univclass[2])*100\n",
    "\n",
    "\n",
    "pMAPE_ceemdan_lstm_vs_Proposed_univclass=((ceemdan_lstm_univclass[0]-proposed_method_univclass[0])/ceemdan_lstm_univclass[0])*100\n",
    "pRMSE_ceemdan_lstm_vs_Proposed_univclass=((ceemdan_lstm_univclass[1]-proposed_method_univclass[1])/ceemdan_lstm_univclass[1])*100\n",
    "pMAE_ceemdan_lstm_vs_Proposed_univclass=((ceemdan_lstm_univclass[2]-proposed_method_univclass[2])/ceemdan_lstm_univclass[2])*100\n",
    "\n",
    "\n",
    "df_PI_univclass=[[pMAPE_LR_vs_Proposed_univclass,pMAPE_SVR_vs_Proposed_univclass,pMAPE_ANN_vs_Proposed_univclass,\n",
    "                pMAPE_RF_vs_Proposed_univclass,pMAPE_LSTM_vs_Proposed_univclass,pMAPE_ceemdan_rf_vs_Proposed_univclass,\n",
    "                pMAPE_ceemdan_lstm_vs_Proposed_univclass],\n",
    "                [pRMSE_LR_vs_Proposed_univclass,pRMSE_SVR_vs_Proposed_univclass,pRMSE_ANN_vs_Proposed_univclass,\n",
    "                pRMSE_RF_vs_Proposed_univclass,pRMSE_LSTM_vs_Proposed_univclass,pRMSE_ceemdan_rf_vs_Proposed_univclass,\n",
    "                pRMSE_ceemdan_lstm_vs_Proposed_univclass],\n",
    "                [pMAE_LR_vs_Proposed_univclass,pMAE_SVR_vs_Proposed_univclass,pMAE_ANN_vs_Proposed_univclass,\n",
    "                pMAE_RF_vs_Proposed_univclass,pMAE_LSTM_vs_Proposed_univclass,pMAE_ceemdan_rf_vs_Proposed_univclass,\n",
    "                pMAE_ceemdan_lstm_vs_Proposed_univclass]]\n",
    "\n",
    "PI_univclass=pd.DataFrame(df_PI_univclass, columns=[\"Proposed Method vs.LR\", \"Proposed Method vs.SVR\",\" Proposed Method vs.ANN\",\n",
    "                                      \"Proposed Method vs.RF\",\"Proposed Method vs.LSTM\",\"Proposed Method vs.CEEMDAN RF\",\n",
    "                                      \"Proposed Method vs. CEEMDAN LSTM\"])\n",
    "PI_univclass= PI_univclass.round(decimals = 2)\n",
    "PI_univclass.set_axis(['MAPE(%)', 'RMSE','MAE'], axis='index')\n",
    "PI_univclass.style.set_caption(\"Percentage Improvement-University Classroom Building\")\n",
    "index = PI_univclass.index\n",
    "index.name = \"Percentage Improvement university classroom\"\n",
    "PI_univclass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export table to png\n",
    "#dfi.export(PI_univclass,\"PI_univclass_table.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
